/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
** This file is part of the example classes of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
** $QT_END_LICENSE$
**
****************************************************************************/

#include <QtGui>

#include "FormConfigurationPages.h"

ConfigurationPage::ConfigurationPage(QWidget *parent) : FormConfigurationPage(parent)
{
    QGroupBox *configGroup = new QGroupBox(tr("Server configuration"), this);

    QLabel *serverLabel = new QLabel(tr("Language"), this);
    this->cmbTranslations = new QComboBox(this);

    QHBoxLayout *serverLayout = new QHBoxLayout();
    serverLayout->addWidget(serverLabel);
    serverLayout->addWidget(this->cmbTranslations);

    QVBoxLayout *configLayout = new QVBoxLayout();
    configLayout->addLayout(serverLayout);
    configGroup->setLayout(configLayout);

    QVBoxLayout *mainLayout = new QVBoxLayout();
    mainLayout->addWidget(configGroup);
    mainLayout->addStretch(1);

    setLayout(mainLayout);

	reset();
}

WRESULT ConfigurationPage::reset()
 {
	QStringList transl = findQmFiles();
	this->cmbTranslations->addItems(transl);

	return WRET_ERR_INTERNAL;
 }

WRESULT ConfigurationPage::apply()
 {
	QTranslator* qtTranslator = new QTranslator();
	QString trQt = "qt_" + QLocale::system().name();
	bool loadedQt = qtTranslator->load(trQt, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
	if ( loadedQt )
		qApp->installTranslator(qtTranslator);
	else
		QMessageBox::critical(this, tr("Configuration"), QString("Error occurred while loading Translation file [%1].").arg(trQt) );

	QTranslator* woshWidgetTranslator = new QTranslator();
	QString trWw = ":/translations/widgets_it.qm";
	bool loadedWw = woshWidgetTranslator->load( trWw );
	if ( loadedWw )
		qApp->installTranslator(woshWidgetTranslator);
	else
		QMessageBox::critical(this, tr("Configuration"), QString("Error occurred while loading Translation file [%1].").arg(trWw) );

	QTranslator* myappTranslator = new QTranslator();
	QString trMy = this->cmbTranslations->currentText();
	bool loadedMy = myappTranslator->load( trMy );
	if ( loadedMy )
		qApp->installTranslator(myappTranslator);
	else
		QMessageBox::critical(this, tr("Configuration"), QString("Error occurred while loading Translation file [%1].").arg(trMy) );

	if ( loadedMy && loadedQt )
		return WRET_OK;

	return WRET_ERR_INTERNAL;
 }

WRESULT ConfigurationPage::discard()
 {
	return WRET_ERR_INTERNAL;
 }

QStringList ConfigurationPage::findQmFiles()
{
    QDir dir(":/translations");
    QStringList fileNames = dir.entryList(QStringList("*.qm"), QDir::Files,
                                          QDir::Name);
    QMutableStringListIterator i(fileNames);
    while (i.hasNext()) {
        i.next();
        i.setValue(dir.filePath(i.value()));
    }
    return fileNames;
}

/*
QString LanguageChooser::languageName(const QString &qmFile)
{
    QTranslator translator;
    translator.load(qmFile);

    return translator.translate("MainWindow", "English");
}
*/







UpdatePage::UpdatePage(QWidget *parent) : FormConfigurationPage(parent)
{
    QGroupBox *updateGroup = new QGroupBox(tr("Package selection"));
    QCheckBox *systemCheckBox = new QCheckBox(tr("Update system"));
    QCheckBox *appsCheckBox = new QCheckBox(tr("Update applications"));
    QCheckBox *docsCheckBox = new QCheckBox(tr("Update documentation"));

    QGroupBox *packageGroup = new QGroupBox(tr("Existing packages"));

    QListWidget *packageList = new QListWidget;
    QListWidgetItem *qtItem = new QListWidgetItem(packageList);
    qtItem->setText(tr("Qt"));
    QListWidgetItem *qsaItem = new QListWidgetItem(packageList);
    qsaItem->setText(tr("QSA"));
    QListWidgetItem *teamBuilderItem = new QListWidgetItem(packageList);
    teamBuilderItem->setText(tr("Teambuilder"));

    QPushButton *startUpdateButton = new QPushButton(tr("Start update"));

    QVBoxLayout *updateLayout = new QVBoxLayout;
    updateLayout->addWidget(systemCheckBox);
    updateLayout->addWidget(appsCheckBox);
    updateLayout->addWidget(docsCheckBox);
    updateGroup->setLayout(updateLayout);

    QVBoxLayout *packageLayout = new QVBoxLayout;
    packageLayout->addWidget(packageList);
    packageGroup->setLayout(packageLayout);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(updateGroup);
    mainLayout->addWidget(packageGroup);
    mainLayout->addSpacing(12);
    mainLayout->addWidget(startUpdateButton);
    mainLayout->addStretch(1);
    setLayout(mainLayout);
}

WRESULT UpdatePage::reset()
 {
	return WRET_ERR_INTERNAL;
 }

WRESULT UpdatePage::apply()
 {
	return WRET_ERR_INTERNAL;
 }

WRESULT UpdatePage::discard()
 {
	return WRET_ERR_INTERNAL;
 }









QueryPage::QueryPage(QWidget *parent) : FormConfigurationPage(parent)
{
    QGroupBox *packagesGroup = new QGroupBox(tr("Look for packages"));

    QLabel *nameLabel = new QLabel(tr("Name:"));
    QLineEdit *nameEdit = new QLineEdit;

    QLabel *dateLabel = new QLabel(tr("Released after:"));
    QDateTimeEdit *dateEdit = new QDateTimeEdit(QDate::currentDate());

    QCheckBox *releasesCheckBox = new QCheckBox(tr("Releases"));
    QCheckBox *upgradesCheckBox = new QCheckBox(tr("Upgrades"));

    QSpinBox *hitsSpinBox = new QSpinBox;
    hitsSpinBox->setPrefix(tr("Return up to "));
    hitsSpinBox->setSuffix(tr(" results"));
    hitsSpinBox->setSpecialValueText(tr("Return only the first result"));
    hitsSpinBox->setMinimum(1);
    hitsSpinBox->setMaximum(100);
    hitsSpinBox->setSingleStep(10);

    QPushButton *startQueryButton = new QPushButton(tr("Start query"));

    QGridLayout *packagesLayout = new QGridLayout;
    packagesLayout->addWidget(nameLabel, 0, 0);
    packagesLayout->addWidget(nameEdit, 0, 1);
    packagesLayout->addWidget(dateLabel, 1, 0);
    packagesLayout->addWidget(dateEdit, 1, 1);
    packagesLayout->addWidget(releasesCheckBox, 2, 0);
    packagesLayout->addWidget(upgradesCheckBox, 3, 0);
    packagesLayout->addWidget(hitsSpinBox, 4, 0, 1, 2);
    packagesGroup->setLayout(packagesLayout);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(packagesGroup);
    mainLayout->addSpacing(12);
    mainLayout->addWidget(startQueryButton);
    mainLayout->addStretch(1);
    setLayout(mainLayout);
}

WRESULT QueryPage::reset()
 {
	return WRET_ERR_INTERNAL;
 }

WRESULT QueryPage::apply()
 {
	return WRET_ERR_INTERNAL;
 }

WRESULT QueryPage::discard()
 {
	return WRET_ERR_INTERNAL;
 }